package com.company.collectionsFramework;

import com.company.generic.Hero;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * for 用于for循环
 * iterator 迭代器遍历
 * for  用于增强型for循环
 *
 * **/
public class Traverse {
    public static void main(String[] args) {
        List<Hero> heros = new ArrayList<>();

        //放5个Hero进入容器
        for (int i=0; i<100; i++){
            heros.add(new Hero("hero name" + i));
        }
        //第一种循环  for 循环
        System.out.println("-----------------for 循环--------------------");
//        for (int i=0; i < heros.size(); i++){
//            Hero h = heros.get(i);
//            System.out.println(h);
//        }
        //迭代器遍历
        //使用迭代器Iterator遍历集合中的元素
        System.out.println("-----------使用while的iterator--------------");
//        Iterator<Hero> it = heros.iterator();
        //从最开始的位置判断"下一个"是否有数据
        //如果有就通过next取出来,并且把指针向下移动
        //直到"下一个"位置没有数据
//        while (it.hasNext()){
//            Hero h = it.next();
//            System.out.println(h);
//
//        }
        //迭代器的for写法
        System.out.println("-----------------使用for的iterator-------------------");
//        for (Iterator<Hero> iterator=heros.iterator(); iterator.hasNext();){
//            Hero hero = (Hero) iterator.next();
//            System.out.println(hero);
//        }

        /**
         * 使用增强型for循环可以非常方便的遍历ArrayList的元素，这是很多开发人员的首选
         * 不过增强的for循环也有不足：
         *  无法用来进行ArrayList的初始化
         *  无法得知当前是第几个元素了，当需要只打印单数元素的时候，就做不到了，必须再定下标变量。
         * **/
//        System.out.println("------------增强型 for 循环");
//        for (Hero h: heros){
//            System.out.println(h);
//        }
        for(int i=0; i<heros.size(); i++){
            Hero hero = heros.get(i);
            if  (hero.name.contains("8")){
                heros.remove(hero);
            }
        }
        System.out.println(heros.size());


    }
}
